/***************************************************************************//**
 * @file     csa37f7x_systick.h
 * @version  V1.0.0
 * @author   cs2040
 * @date     2020-09-26 PM
 * @brief    该文件包含了SYSTICK各功能参数的定义和函数接口声明
 * 
 * @copyright Copyright (C) 2020 Chipsea Technologies Corp. All rights reserved.
 ****************************************************************************
 * @attention
 *  硬件平台: CSA37F70 评估板V1.0 \n
 *  SDK版本： CSA37F7X_SDK_1.0.0
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date        <th>Version  <th>Author    <th>Description
 * <tr><td>2020-09-26  <td>1.0.0    <td>Chipsea MCU Group  <td>创建初始版本
 * </table>
 *
 *****************************************************************************/

#ifndef __CSA37F7X_SYSTICK_H__
#define __CSA37F7X_SYSTICK_H__

// Include external header file.
#include "csa37f7x.h"

#ifdef __cplusplus
extern "C" {
#endif


/** @addtogroup SYSTICK 系统滴答定时器(SYSTICK) 
  Cortex-M0 包含一个集成的系统定时器, SysTick. SysTick 提供一种简单的， 24 位写清零，下数计
数，计数至 0 后自装载的计数器，有一个灵活的控制机制。计数器可作为实时操作系统的节拍定时器
或者作为一个简单的计数器。<br>
  @{
*/


/**
* @brief  定义滴答定时器初始化结构体
*/
typedef struct
{
    uint8_t clksrc;                                                     /*!<系统节拍器时钟源选择1，1Systick 0时钟源可选 */
    enable_state_t int_enable;                                          /*!<滴答定时器中断使能设置 */
    uint32_t reload_value;                                              /*!<滴答定时器重载值设置 */
} systick_config_t ;

/**
* @brief  宏定义检查24位数据
*/
#define BIT_24_CHECK(value)				(value < 0xFFFFFF)
#define BIT_16_CHECK(value)				(value < 0xFFFF)
#define BIT_7_CHECK(value)				(value < 0x7F)

/**@brief		    滴答定时器初始化
 *
 * @param[in]	    p_systick_config     滴答定时器初始化结构体
 * @return		    无
*/
void systick_init (systick_config_t *p_systick_config);

/**@brief		    滴答定时器使能
 *
 * @return		    无
*/
void systick_enable (void);

/**@brief		    关闭滴答定时器
 *
 * @return		    无
*/
void systick_disable (void);

/**@brief		    获取滴答定时器重装载值
 *
 * @return          滴答定时器重装载值
*/
uint32_t systick_reload_get (void);

/**@brief		    设置滴答定时器重装载值
 *
 * @param[in]	    reload_value     待设置的滴答定时器重装载值
 * @return		    无
*/
void systick_reload_set  (uint32_t reload_value);

/**@brief		    获取滴答定时器计数状态
 *
 * @return		    计数状态
*/
uint8_t systick_countflag_get (void);

/**@brief			滴答定时器计数值复位
 *
 * @return			计数状态
*/
void systick_current_value_reset(void);


/**@brief		    延迟函数，单位ms
 *
 * @param[in]	    time_ms     待设置的延迟ms数
 * @return		    计数状态
*/
void timer_delay_ms(uint16_t time_ms);	

/**@brief		    延迟函数，单位us
 *
 * @param[in]	    time_us     待设置的延迟us数
 * @return		    计数状态
*/
void timer_delay_us(int32_t time_us);	

/**@brief		    定时器延时初始化
 *
 * @return		    无
*/
void timer_delay_init(void);   

/**@brief		    SYSTICK状态读取
 *
 * @return		    SYSTICK状态
*/
uint32_t systick_status_read(void);

/*@}*/ /* end of group SYSTICK */

#ifdef __cplusplus
}
#endif

#endif  //__CSA37F7X_SYSTICK_H__


/*** (C) COPYRIGHT 2020 Chipsea Technologies (Shenzhen) Corp. ***/
